在建立BLE的連線之前,必須先由主機端(Master)決定四個參數,這四個參數都和連接時間有關:
連接參數 | 描述 | 範圍 |
---|---|---|
Connection Interval | 兩個連接事件的時間間隔 | 7.5 ms ~ 4 s |
Slave Latency | 從機可忽略主機發出的連接事件次數 | 0 ~ 499 |
Supervision Timeout | Connection supervision timeout | 100 ms ~ 32 s |
##Connection Interval
下圖是藍牙裝置在連接狀態下,耗電量(橫軸)與時間(縱軸)的關係圖,
首先我們可以看到四支紅色牙籤插在紅色沙灘上,那四支牙籤就代表四個連接事件,其餘的時間裝置進入省電的狀態,
這也是BLE可以很省電的原因之一。
每次的連接事件都會進行無線電的收發(RX和TX),而且收發相對於待機時的耗電來看是極高的。
連接區間越小,代表連接事件越頻繁的發生,就會提高裝置的耗電量。
##Slave Latency
為了提升從機(Slave)的靈活度,此參數允許從機可以跳過數個由主機(Master)發出的連接事件。
當從機沒有要對主機發送資料時,可以決定跳過數個連接事件,以降低裝置的耗電量,
但跳過的次數不可超過Slave Latency參數,否則連線將判定成失敗,就是斷線的意思。
上圖可以看出,
當Slave Latency被設定成關閉時,每次主機發出的連接事件,從機都必須要做回應。
當Slave Latency被設定成3的時候,從機則最多可忽略三個連接事件,但下一次就必須要回應,否則就會被判定為斷線。
如果兩次成功的連接事件的時間間隔,超過 Supervision Timeout 則判定為斷線。此參數的值必須要大於有效連接區間。
所謂的有效連線區間就是把 Connection Interval 和 Slave Latency 一起考慮進來,
這邊有一個算式:
Effective Connection Interval = (Connection Interval) * (1 + [Slave Latency])
有些人看到數學式子就想睡,但我還好,
沒關係,我們用上面 Slave Latency 那張來,看他的有效連接區間是多少,
假設:
連接區間(Connection Interval)=100ms
Slave Latency = 3
則
Effective Connection Interval = (100 ms) * (1 + 3) = 400 ms
在假設第一個M是0 ms時候發出,此時S也有進行回應,所以是一個成功的連接事件,
接下來S為了省電,一直睡直到 Slave Latency 的扣打用完,在第五個M發出之後,S才做回覆,
所以這個連線的有效連接區間就是400 ms。
要設定超時的秒數,當然要比在合理條件下可能會發生的情況還要大,
所以 Supervision Timeout 一定要比 有效連接區間來得大。
最後原本想要提一下 iOS 對於BLE連接參數的限制,但時間用完了,需要的可以自己Google,
另外,Android 手機的連接參數雖然沒有特別的限制,聽說有些手機的連接參數設的很寬鬆,導致手機會誤判仍和BLE裝置連接著。
開發板已經到手了,藍牙學習的部分就大概先這樣,之後邊做邊學,
接著會開始建立開發環境,希望明天也能順利發文。
參考文章: